import tkinter as tk

# 定义函数返回最长公共子序列长度
def git(code1, code2):
    # 返回字符串的长度
    c1 = len(code1)
    c2 = len(code2)
    # 创建一个二维数组
    data = [[0] * (c2 + 1) for _ in range(c1 + 1)]
    # 开始逐行逐列遍历
    for i in range(1, c1 + 1):
        for j in range(1, c2 + 1):
            if code1[i - 1] == code2[j - 1]:
                # 字母匹配
                data[i][j] = data[i - 1][j - 1] + 1
            else:
                # 不匹配：取两个斜角最大的值继承下来即可
                data[i][j] = max(data[i - 1][j], data[i][j - 1])
    return data[c1][c2]

# 定义函数返回输入框中的文本
def text(entry):
    return entry.get()

# 创建主窗口
root = tk.Tk()
root.title("GIT源码相似性")
# 设置窗口大小
root.geometry("400x200")
# 创建标签和输入框
tk.Label(root, text="GIT源码相似性").pack(pady=10)

# 已知源码1
frame1 = tk.Frame(root)
frame1.pack()
tk.Label(frame1, text="已知源码1").pack(side=tk.LEFT)
entry_code1 = tk.Entry(frame1)
entry_code1.insert(0, "apple")
entry_code1.pack(side=tk.LEFT)

# 已知源码2
frame2 = tk.Frame(root)
frame2.pack()
tk.Label(frame2, text="已知源码2").pack(side=tk.LEFT)
entry_code2 = tk.Entry(frame2)
entry_code2.insert(0, "hello")
entry_code2.pack(side=tk.LEFT)

# 目标源码
frame3 = tk.Frame(root)
frame3.pack()
tk.Label(frame3, text="目标源码").pack(side=tk.LEFT)
entry_my_code = tk.Entry(frame3)
entry_my_code.insert(0, "help")
entry_my_code.pack(side=tk.LEFT)

# 显示结果的标签
result_label = tk.Label(root, text="")
result_label.pack(pady=20)

# 计算并显示结果的函数
def calculate():
    text1 = text(entry_code1)
    text2 = text(entry_code2)
    my_text = text(entry_my_code)
    result = f"目标源码 {my_text}\n"
    result += f"与 {text1} 的最长公共子序列长度是 {git(text1, my_text)}\n"
    result += f"与 {text2} 的最长公共子序列长度是 {git(text2, my_text)}"
    result_label.config(text=result)

# 计算按钮
calculate_button = tk.Button(root, text="计算", command=calculate)
calculate_button.pack()

# 运行主循环
root.mainloop()